package facade

import (
	errno "entrytask/pkg/error"
	"fmt"
)

// User 返回用户信息对象
type User struct {
	ID       int64  `json:"id"`
	Username string `json:"username"`
	Nickname string `json:"nickname"`
	Profile  string `json:"profile"`
}

// User.String
func (u User) String() string {
	return fmt.Sprintf("Id:%d, Username:%s, Nickname:%s, Profile:%s", u.ID, u.Username, u.Nickname, u.Profile)
}

// UserLogonRequest 用户注册时的请求对象
type UserLogonRequest struct {
	Username string `json:"username"`
	Nickname string `json:"nickname"`
	Password string `json:"password"`
}

// UserLogonRequest.String 去除密码打印
func (ulr *UserLogonRequest) String() string {
	return fmt.Sprintf("UserLogonRequest{Username:%s, Nickname:%s}", ulr.Username, ulr.Nickname)
}

// UserLoginRequest 用户登录时的请求对象
type UserLoginRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

// UserLoginRequest.String 去除密码打印
func (ulr *UserLoginRequest) String() string {
	return fmt.Sprintf("UserLoginRequest{Username:%s}", ulr.Username)
}

// UserUpdateRequest 用户更新昵称和头像时的请求对象
// 更新昵称时，Username和Nickname不可为空
// 更新头像时，Username和ProfilePath不可为空
type UserUpdateRequest struct {
	Username    string `json:"username"`
	Nickname    string `json:"nickname"`
	ProfilePath string `json:"profile"`
}

// UserLogin 用户登录暴露方法: "Login"
// return user User, errno
// user:	成功则返回更新后的用户信息
// token:	登录成功之后返回token
// err:		异常，0-成功，1-账号不存在，2-密码错误
var UserLogin func(request *UserLoginRequest) (user *User, token string, err *errno.Errno)

// UserQueryByName 查询用户信息暴露方法: "QueryUser"
// return user User, errno
// user:	返回用户详细信息
// err:		异常，0-成功，1-用户名不存在
var UserQueryByName func(username string) (user *User, err *errno.Errno)

// UserQueryByToken 查询用户信息暴露方法: "QueryUserByToken"
// return user User, errno
// user:	返回用户详细信息
// err:		异常，0-成功，1-用户名不存在
var UserQueryByToken func(token string) (user *User, err *errno.Errno)

// UserUpdateInfo 更新用户信息, 包含用户昵称和头像路径
// return user User, errno
// user:	成功则返回更新后的用户信息
var UserUpdateInfo func(request *UserUpdateRequest) (user *User, err *errno.Errno)

// UserLogon 用户注册暴露方法: "Logon"
// return username string, errno
// username:	注册成功后的用户名
//var UserLogon func(request *UserLogonRequest) (username string, err *errno.Errno)

// UserUpdateProfile 更新用户头像暴露方法: "UpdateNick"
// return user User, errno
// user:	成功则返回更新后的用户信息
//var UserUpdateProfile func(request *UserUpdateRequest) (user *User, err *errno.Errno)

// UserUpdateNick 更新用户昵称暴露方法: "UpdateProfile"
// return user User, errno
// user:	成功则返回更新后的用户信息
//var UserUpdateNick func(request *UserUpdateRequest) (user *User, err *errno.Errno)

// facade接口常量标识
const (
	Login         = "Login"
	QueryName     = "QueryUserByName"
	QueryToken    = "QueryUserByToken"
	UpdateUser    = "UpdateUser"
	Logon         = "Logon"
	UpdateNick    = "UpdateNick"
	UpdateProfile = "UpdateProfile"
)
